#ifndef _TDA_INCIDENCIA_H_
#define _TDA_INCIDENCIA_H_

#include <stdlib.h>
#include <stdio.h>
#include "listasimple.h"
#include "cola.h"
/* Tipos y Enumerados */


typedef enum { TIN_BUG, TIN_IMPRO, TIN_TASK, TIN_NEWFUNC} tipo_inci_t;

typedef enum { TIN_FIXED, TIN_DONT_FIX, TIN_INCOMPLETE} resol_inci_t;

typedef enum { TIN_OPEN, TIN_PROGRESS, TIN_RESOLVED, TIN_REOPEN, TIN_CLOSED} stat_inci_t;

typedef enum { TIN_BLOCKING, TIN_CRITICAL, TIN_MAJOR, TIN_MINOR, TIN_TRIVIAL} prior_inci_t;


typedef struct
{
    char* comm_date; /* fecha en la que se realiza el comentario*/
    int comm_user_id; /* ID del usuario que realiza el comentario*/
    char* comm_desc; /* Comentario*/
} inci_comment_t;

typedef struct
{
    char* stat_date; /* Fecha en la que se cambio el estado*/
    int stat_user_id; /* Usuario que cambio el estado*/
    stat_inci_t stat_desc; /* Estado*/
} inci_status_t;

typedef struct
{
    int inci_id; /* ID de la incidencia */
    tipo_inci_t inci_type; /* Tipo de incidencia*/
    prior_inci_t inci_priority; /* Prioridad de la incidencia*/
    int inci_user; /* ID del usuario que creo la incidencia*/
    int inci_assigned_user; /* ID del usuario al que se le asigno */
    char* inci_date_created;
    int inci_project_id;
    char* inci_summary;
    char* inci_description;
    resol_inci_t inci_resolved;
    char* inci_date_solved;
    TListaSimple inci_stat_hist; /* historial de estados */
    TListaSimple inci_comm; /* comentarios de la incidencia */
} TIN;

/* Primitivas */

int TIN_Crear ( TIN* tin, int inci_id, tipo_inci_t inci_type, prior_inci_t inci_priority, int inci_user, int inci_assigned_user,
                char* inci_date_created, int inci_project_id, char* inci_summary, char* inci_description );

int TIN_Liberar( TIN* tin );

int TIN_CambiarEstado( TIN* tin, const char* fecha,const int usuario_id,const stat_inci_t estado );

int TIN_Resolver( TIN* tin,const char* fecha, int usuario_id, resol_inci_t resolucion );

int TIN_Comentar( TIN* tin, char* fecha, int usuario_id, char* comentario );

int TIN_GetDatos ( TIN* tin, int* inci_id, tipo_inci_t* inci_type, prior_inci_t* inci_priority, int* inci_user, int* inci_assigned_user,
                    char** inci_date_created, int* inci_project_id, char** inci_summary, char** inci_description );

int TIN_GetListaComentarios( const TIN* tin, TListaSimple *comentarios );

int TIN_GetListaEstados( const TIN* tin, TListaSimple *estados );

int TIN_RealocarStrings( TIN* tin );

int LiberarEstados(TListaSimple* status);


#endif /* _TDA_INCIDENCIA_H_ */
